Introdução
O dataset foi escolhido pela plataforma kaggle e trata de observações sobre o mercado automotivo online da Georgia 🇬🇪 no ano de 2024.
País localizado no cáucaso com cerca de 3,7 milhões de habitantes.
Conforme o schema apresentado a seguir o dataset apresenta diversos detalhes sobre as vendas, condições do carro e outros detalhes mais específicos.
Para esse trabalho, com o intuito de enfatizar os processos e análises que foram aprendidos na disciplina, tomamos liberdade de manipular o banco fornecido no site e descosiderar variáveis não utilizadas no modelo.
Abaixo também apresentamos uma tabela com as variáveis que escolhemos enfatizar e serão tratadas no modelo linear simulado.
Explorando o banco de dados
Nos moldes que foram aplicados temos 54112 registros a serem analisados.
Estatísticas gerais
Quantitativas
Visão geral de variáveis quantitativas;
| price | car_run_km | prod_year | engine_volume | cylinders | airbags | |
|---|---|---|---|---|---|---|
| min | 1020.0 | 1006.0 | 1911.00 | 1.00 | 1.00 | 0.00 |
| max | 8388607.0 | 1599998.0 | 2024.00 | 20000.00 | 12.00 | 12.00 |
| median | 7500.0 | 139200.0 | 2015.00 | 2000.00 | 4.00 | 9.00 |
| mean | 11210.5 | 149775.2 | 2013.50 | 2349.74 | 4.64 | 8.43 |
| var | 1502001894.7 | 9915531471.5 | 43.96 | 1089134.11 | 1.95 | 11.57 |
Categorias
Principais categorias de carros;
| category | count | mean_price |
|---|---|---|
| Sedan | 22048 | 9921.851 |
| Jeep | 15961 | 15821.028 |
| Hatchback | 7869 | 5655.509 |
| Coupe | 1702 | 13819.976 |
| Minivan | 1448 | 8790.843 |
| Goods wagon | 1196 | 6283.490 |
Montadoras
Montadoras com mais registros;
| man_name | count | mean_price |
|---|---|---|
| Toyota | 9042 | 11255.517 |
| Mercedes-Benz | 6598 | 15656.034 |
| BMW | 4709 | 15227.045 |
| Ford | 4504 | 7525.568 |
| Hyundai | 3005 | 9070.884 |
| Honda | 2834 | 6313.229 |
| Nissan | 2607 | 5574.705 |
| Volkswagen | 2531 | 7754.279 |
| Subaru | 2018 | 8295.811 |
| Lexus | 1810 | 20302.830 |
Graficos das variaveis
Preço
Quilometragem
Ano do carro
Volume do motor
Cilindros
Airbags
Equação do modelo linear
A equação do modelo linear é dada por:
\[ \text{price} = \beta_0 + \beta_1 \cdot \text{car_run_km} + \beta_2 \cdot \text{prod_year} + \beta_3 \cdot \text{engine_volume} + \beta_4 \cdot \text{cylinders} + \beta_5 \cdot \text{airbags} + \beta_6 \cdot \text{abs_break} + \beta_7 \cdot \text{esd} + \beta_8 \cdot \text{el_windows} + \beta_9 \cdot \text{conditioner} + \beta_10 \cdot \text{leather} + \beta_11 \cdot \text{nav_system} \]
#>
#> Call:
#> lm(formula = price ~ car_run_km + prod_year + engine_volume +
#> cylinders + airbags + abs_break + esd + el_windows + conditioner +
#> leather + nav_system, data = data_filter)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -44074 -5005 -1857 1831 8376743
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.284e+06 6.463e+04 -19.862 <2e-16 ***
#> car_run_km -2.199e-02 1.861e-03 -11.813 <2e-16 ***
#> prod_year 6.386e+02 3.210e+01 19.896 <2e-16 ***
#> engine_volume 2.484e+00 2.242e-01 11.079 <2e-16 ***
#> cylinders 1.681e+03 1.683e+02 9.984 <2e-16 ***
#> airbags -4.221e+02 5.515e+01 -7.652 2e-14 ***
#> abs_breakTRUE 1.596e+03 8.257e+02 1.933 0.0532 .
#> esdTRUE 8.556e+01 7.203e+02 0.119 0.9054
#> el_windowsTRUE 1.479e+03 1.042e+03 1.420 0.1557
#> conditionerTRUE -1.146e+03 9.856e+02 -1.163 0.2448
#> leatherTRUE 1.116e+04 3.815e+04 0.293 0.7699
#> nav_systemTRUE 1.321e+03 5.371e+02 2.459 0.0139 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 38150 on 54100 degrees of freedom
#> Multiple R-squared: 0.03124, Adjusted R-squared: 0.03104
#> F-statistic: 158.6 on 11 and 54100 DF, p-value: < 2.2e-16
Apenas algumas variáveis apresentaram significância no modelo. Assim, o próximo modelo será construído excluindo as variáveis com p-valor maior que 0,05
#>
#> Call:
#> lm(formula = price ~ car_run_km + prod_year + engine_volume +
#> cylinders + airbags + abs_break + nav_system, data = data_filter)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -44011 -5008 -1852 1830 8376710
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.275e+06 6.395e+04 -19.940 < 2e-16 ***
#> car_run_km -2.198e-02 1.860e-03 -11.815 < 2e-16 ***
#> prod_year 6.344e+02 3.177e+01 19.970 < 2e-16 ***
#> engine_volume 2.478e+00 2.237e-01 11.076 < 2e-16 ***
#> cylinders 1.682e+03 1.682e+02 10.001 < 2e-16 ***
#> airbags -4.231e+02 5.482e+01 -7.717 1.21e-14 ***
#> abs_breakTRUE 1.905e+03 5.250e+02 3.628 0.000286 ***
#> nav_systemTRUE 1.389e+03 4.894e+02 2.837 0.004551 **
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 38150 on 54104 degrees of freedom
#> Multiple R-squared: 0.0312, Adjusted R-squared: 0.03107
#> F-statistic: 248.9 on 7 and 54104 DF, p-value: < 2.2e-16
Interpretação dos Coeficientes
\[ \text{price} = \beta_0 + \beta_1 \cdot \text{car_run_km} + \beta_2 \cdot \text{prod_year} + \beta_3 \cdot \text{engine_volume} + \beta_4 \cdot \text{cylinders} + \beta_5 \cdot \text{airbags} + \beta_6 \cdot \text{abs_break} + \beta_7 \cdot \text{nav_system} \]
\(\beta_0\) (intercept) nos indica que o valor esperado quando do veículo quando todas variáveis independentes são iguais a zero. Logo o beta_0 não tem interpretação prática pois o ano de produção não pode ser 0.
car_run_km (Quilometragem): Para cada quilômetro adicional rodado, o preço do veículo diminuí em média -0.02 unidades monetárias, mantendo todas as outras variáveis constantes.
prod_year (Ano de produção): Para cada ano adicional de produção, o preço do veículo aumenta em média 634.40 unidades monetárias, mantendo todas as outras variáveis constantes.
engine_volume (volume do motor) : Para cada unidade adicional no volume do motor, o preço do veículo aumenta em média 2.47 unidades monetárias, mantendo todas as outras variáveis constantes.
cylinders (cilindro adicional): Para cada cilindro adicional, o preço do veículo aumenta em média 1682.0 unidades monetárias, mantendo todas as outras variáveis constantes.
airbags Para cada airbags, o preço do veículo diminui em média -423.1 unidades monetárias, mantendo todas as outras variáveis constantes.
abs_break (Sistema de freio) Para presença de ABS, o aumento esperado na variável resposta é 1905 unidades monetárias, mantendo todas as outras variáveis constantes.
nav_system (Sistema de navegação) Para presença de Sistema de navegação, o aumento esperado na variável resposta é 1389 unidades monetárias, mantendo todas as outras variáveis constantes.
Interpretação do teste F
F-statistic: 248.9
p-valor: < 2.2e-16
Adjusted R-squared: 0.03107
F-statistic: O valor de 248.9 indica que a variabilidade explicada pelo modelo é significativamente maior do que a variabilidade não explicada. Em outras palavras, o modelo como um todo é significativo.
p-valor: O p-valor é extremamente pequeno (< 2.2e-16), o que significa que a probabilidade de observar um valor de F tão extremo, ou mais extremo, sob a hipótese nula é praticamente zero.
Adjusted R-squared: Apenas cerca de 3.1% da variabilidade dos dados observados é explicada pelo modelo ajustado.
Conclusão: Apesar do modelo ser estatisticamente significativo como um todo, com um p-valor extremamente pequeno (< 2.2e-16), sua capacidade explicativa é muito limitada, conforme evidenciado pelo \(R^2\) ajustado de apenas 3.1%. Isso indica que o modelo consegue explicar apenas uma pequena fração da variabilidade nos preços dos carros.
Portanto, prosseguiremos com a análise detalhada dos resíduos, buscando identificar possíveis outliers ou padrões que possam estar influenciando negativamente o desempenho do modelo e comprometendo sua capacidade preditiva.
Voltando a equação…
\[ \text{price} = \beta_0 + \beta_1 \cdot \text{car_run_km} + \beta_2 \cdot \text{prod_year} + \beta_3 \cdot \text{engine_volume} + \beta_4 \cdot \text{cylinders} + \beta_5 \cdot \text{airbags} + \beta_6 \cdot \text{abs_break} + \beta_7 \cdot \text{nav_system} \] Substituindo os valores dos coeficientes estimados, temos:
\[ \begin{align*} \text{price} = &\ -1,275,000 - 0.02198 \cdot \text{car_run_km} + 634.4 \cdot \text{prod_year} + 2.478 \cdot \text{engine_volume} \\ &+ 1,682 \cdot \text{cylinders} - 423.1 \cdot \text{airbags} + 1,905 \cdot \text{abs_break} + 1,389 \cdot \text{nav_system} \end{align*} \]
Multicolinearidade
Outliers podem distorcer as relações entre variáveis, afetando correlações e métricas como o VIF, o que pode dar uma falsa impressão da gravidade da multicolinearidade. Para minimizar esses efeitos, analisamos a multicolinearidade tanto na escala original quanto na logarítmica, já que a transformação logarítmica ajuda a estabilizar a variância e reduzir a influência de valores extremos.
Escala original
| VIF | |
|---|---|
| car_run_km | 1.276091 |
| prod_year | 1.649412 |
| engine_volume | 2.026582 |
| cylinders | 2.046492 |
| airbags | 1.292736 |
| abs_break | 1.936921 |
| nav_system | 2.093494 |
Com base nas correlações moderadas entre algumas variáveis explicativas e os baixos valores de VIF (entre 1 e 2), evidenciando que a multicolinearidade não é um problema relevante neste modelo, pois, embora algumas variáveis apresentem covariância moderadas entre si, elas não estão redundantes a ponto de inflacionar a variância dos coeficientes.
Com escala log
| Variável | VIF | |
|---|---|---|
| nav_system | nav_system | 2.077215 |
| car_run_km | car_run_km | 1.196893 |
| prod_year | prod_year | 1.557294 |
| cylinders | cylinders | 2.197210 |
| airbags | airbags | 1.237580 |
| abs_break | abs_break | 1.913135 |
| engine_volume | engine_volume | 2.158339 |
Mesmo ao aplicar a transformação logarítmica, os valores do VIF permaneceram baixos, indicando que a multicolinearidade não é um problema relevante neste modelo.
Análise de resíduos
Transformação em log escala
#>
#> Call:
#> lm(formula = log(price) ~ car_run_km + prod_year + cylinders +
#> airbags + abs_break + nav_system, data = data_filter)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -2.7563 -0.3448 -0.0139 0.3284 6.9267
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -9.485e+01 1.024e+00 -92.64 <2e-16 ***
#> car_run_km -1.055e-06 2.972e-08 -35.49 <2e-16 ***
#> prod_year 5.114e-02 5.086e-04 100.56 <2e-16 ***
#> cylinders 1.745e-01 1.931e-03 90.35 <2e-16 ***
#> airbags -1.793e-02 8.777e-04 -20.43 <2e-16 ***
#> abs_breakTRUE 1.753e-01 8.377e-03 20.93 <2e-16 ***
#> nav_systemTRUE 3.068e-01 7.831e-03 39.17 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 0.611 on 54105 degrees of freedom
#> Multiple R-squared: 0.4169, Adjusted R-squared: 0.4169
#> F-statistic: 6448 on 6 and 54105 DF, p-value: < 2.2e-16